My.url = function(url) {
	if (!url) {
		return 'about:blank';
	}
	if (url.indexOf('http://') == 0) {
		return url;
	}
	if (url.indexOf('/') == 0) {
		return ROOT_PATH + url;
	}
	return ROOT_PATH + '/' + url;
};
/**
 * 自动补全
 */
My.leftPad = function(str, len, chr) {
	len = len || 0;
	if (!str || str.length >= len) {
		return str;
	}
	var l = len - str.length;
	for (var i = 0; i < l; i++) {
		str = (chr || ' ') + str;
	}
	return str;
};
/**
 * 错误提示
 */
My.error = function() {
	var title = "系统错误", fn = Ext.emptyFn, msg = "", icon = Ext.MessageBox.ERROR;
	switch (arguments.length) {
		case 0 :
			title = "代码错误";
			msg = "请输入提示信息！";
			break;
		case 1 :
			// 如果只有1个参数时：表示只有提示信息
			msg = arguments[0];
			break;
		case 2 :
			// 如果有2个参数时：第1个为标题、第2个为提示信息或方法
			if (Ext.isString(arguments[1])) {
				title = arguments[0];
				msg = arguments[1];
			} else {
				msg = arguments[0];
				fn = arguments[1];
			}
			break;
		default :
			// 如果有3个参数时：第1个为标题、第2个为提示信息、第3个是方法
			title = arguments[0];
			msg = arguments[1];
			fn = arguments[2];
			break;
	}
	Ext.MessageBox.show({
				title : title,
				minWidth : 200,
				maxWidth : 480,
				msg : Ext.util.Format.ellipsis(msg, 1000, '...'),
				fn : fn,
				icon : icon,
				buttons : Ext.MessageBox.OK
			});

};
/**
 * 信息提示
 */
My.alert = function() {
	var title = "系统提示", fn = Ext.emptyFn, msg = "", icon = Ext.MessageBox.INFO;
	switch (arguments.length) {
		case 0 :
			title = "代码错误";
			msg = "请输入提示信息！";
			icon = Ext.MessageBox.ERROR;
			break;
		case 1 :
			// 如果只有1个参数时：表示只有提示信息
			msg = arguments[0];
			break;
		case 2 :
			// 如果有2个参数时：第1个为标题、第2个为提示信息或方法
			if (Ext.isString(arguments[1])) {
				title = arguments[0];
				msg = arguments[1];
			} else {
				msg = arguments[0];
				fn = arguments[1];
			}
			break;
		default :
			// 如果有3个参数时：第1个为标题、第2个为提示信息、第3个是方法
			title = arguments[0];
			msg = arguments[1];
			fn = arguments[2];
			break;
	}
	Ext.MessageBox.show({
				title : title,
				minWidth : 200,
				maxWidth : 480,
				msg : msg,
				fn : fn,
				icon : icon,
				buttons : Ext.MessageBox.OK
			});
};
/**
 * 警告
 */
My.warning = function() {
	var title = "系统警告", fn = Ext.emptyFn, msg = "", icon = Ext.MessageBox.WARNING, buttons = Ext.Msg.OK;
	switch (arguments.length) {
		case 0 :
			title = "代码错误";
			msg = "请输入提示信息！";
			icon = Ext.MessageBox.ERROR;
			break;
		case 1 :
			// 如果只有1个参数时：表示只有提示信息
			msg = arguments[0];
			break;
		case 2 :
			// 如果有2个参数时：第1个为标题、第2个为提示信息或方法
			if (Ext.isString(arguments[1])) {
				title = arguments[0];
				msg = arguments[1];
			} else {
				msg = arguments[0];
				fn = arguments[1];
			}
			break;
		default :
			// 如果有3个参数时：第1个为标题、第2个为提示信息、第3个是方法
			title = arguments[0];
			msg = arguments[1];
			fn = arguments[2];
			buttons = Ext.Msg.YESNO;
			break;
	}
	Ext.MessageBox.show({
				title : title,
				minWidth : 200,
				maxWidth : 480,
				msg : msg,
				fn : fn,
				icon : icon,
				buttons : buttons
			});
};
/**
 * 确认
 */
My.confirm = function() {
	var title = "系统提示", fn = Ext.emptyFn, msg = "", icon = Ext.MessageBox.QUESTION, buttons = Ext.Msg.YESNO;
	switch (arguments.length) {
		case 0 :
			title = "代码错误";
			msg = "请输入提示信息！";
			icon = Ext.MessageBox.ERROR;
			break;
		case 1 :
			// 如果只有1个参数时：表示只有提示信息
			msg = arguments[0];
			break;
		case 2 :
			// 如果有2个参数时：第1个为标题、第2个为提示信息或方法
			if (Ext.isString(arguments[1])) {
				title = arguments[0];
				msg = arguments[1];
			} else {
				msg = arguments[0];
				fn = arguments[1];
			}
			break;
		default :
			// 如果有3个参数时：第1个为标题、第2个为提示信息、第3个是方法
			title = arguments[0];
			msg = arguments[1];
			fn = arguments[2];
			break;
	}
	Ext.MessageBox.show({
				title : title,
				minWidth : 200,
				maxWidth : 480,
				msg : msg,
				fn : fn,
				icon : icon,
				buttons : buttons
			});
};
/**
 * Ext.Ajax.request 封装，实现添加等待效果
 * 
 * @param {}
 *            cfg Ext.Ajax.request配置
 */
My.request = function(cfg) {
	if (!cfg) {
		My.error("代码错误", "没有找到配置项！");
		return;
	}
	if (!cfg.url) {
		My.error("代码错误", "没有配置URL地址！");
		return;
	}
	var success = cfg.success || function(response, o) {
		var msg = "操作成功！";
		try {
			var obj = Ext.decode(response.responseText);
			if (obj.msg) {
				msg = obj.msg;
			}
		} catch (e) {

		}
		My.alert(msg, cfg.successCallback);
	};
	var mask = cfg.loadMask || "数据处理中，请稍后...";
	// targetEl 目标el，目的是实现在哪个控件上添加遮罩
	var targetEl = cfg.targetEl || Ext.getBody();
	var myMask = cfg.loadMask === false ? {
		show : Ext.emptyFn,
		hide : Ext.emptyFn
	} : new Ext.LoadMask(targetEl, {
				msg : mask
			});
	myMask.show();
	cfg.success = function(response, opts) {
		myMask.hide();
		try {
			var obj = Ext.decode(response.responseText);
			if (obj.success != false) {
				success(response, opts);
				return;
			} else {
				if (obj.status == -1) {
					My.error(obj.msg, function() {
								window.top.location = My.url('/login.jsp');
							});
					return;
				}
				obj.msg = obj.msg || "系统繁忙，请稍后再试！";
				My.error(obj.msg, cfg.failureCallback);
			}
		} catch (e) {
		}
	};
	cfg.failure = function(response, opts) {
		myMask.hide();
		var msg;
		if (response.status == 0 || response.status == -1) {
			msg = "无法连接到服务器，请检查网络是否有问题或联系管理员解决!";
			cfg.failureCallback = function() {
				window.top.location = My.url('/login.jsp');
			};
		} else {
			msg = response.status + "，" + response.statusText;
		}
		My.error("系统错误", msg, cfg.failureCallback);
	};
	Ext.Ajax.request(cfg);
};
/**
 * Form submit提交方式封装
 * 
 * @param {}
 *            form
 * @param {}
 *            cfg
 */
My.submit = function(form, cfg) {
	var isForm = form instanceof Ext.form.FormPanel;
	var isBaseForm = form instanceof Ext.form.BasicForm;
	if (!isForm && !isBaseForm) {
		My.error("代码错误", "没有传入FORM表单！");
		return;
	}
	if (!cfg) {
		My.error("代码错误", "没有设置配置项！");
		return;
	}
	if (!cfg.url) {
		My.error("代码错误", "没有配置URL地址！");
		return;
	}
	if (isForm) {
		form = form.getForm();
	}
	cfg.submitEmptyText = false;
	cfg.waitTitle = cfg.waitTitle || "系统提示";
	cfg.waitMsg = cfg.waitMsg || "数据处理中，请稍后...";
	cfg.failure = function(f, action) {
		try {
			switch (action.failureType) {
				case Ext.form.Action.CLIENT_INVALID :
					var errors = [];
					form.items.each(function(item) {
								var len = item.getErrors().length;
								if (len > 0) {
									// var id = item.getId();
									// var temp = item.getErrors()[0];
									// var label = Ext.DomQuery
									// .select("label[for='" + id + "']")
									// .text();
									// if (label) {
									// label = label.replace(/\*/g, "");
									// } else {
									// label = Ext.util.Format
									// .stripScripts(item.fieldLabel)
									// || "";
									// label = label.replace(/\*/g, "") + ":";
									// }
									// errors.push(label + temp);
								}
							});
					var msg = "数据未通过验证，请检查！";
					if (errors.length > 0) {
						msg = errors.join("<br/>");
					}
					My.error(msg, cfg.failureCallback);
					break;
				case Ext.form.Action.CONNECT_FAILURE :
					var msg = action.response.status + "，"
							+ action.response.statusText + "！";
					My.error(msg, cfg.failureCallback);
					break;
				case Ext.form.Action.SERVER_INVALID :
					var msg = "系统繁忙，请稍后再试！";
					if (action.result) {
						msg = action.result.msg || msg;
					}
					if (action.result.status == -1) {
						My.error(msg, function() {
									window.top.location = My.url('/login.jsp');
								});
						return;
					}
					My.error(msg, cfg.failureCallback);
					break;
				default :
					My.error("系统繁忙，请稍后再试！", cfg.failureCallback);
					break;
			}
		} catch (e) {
			My.error("代码错误", e, cfg.failureCallback);
		}
	};
	cfg.success = cfg.success || function(form, action) {
		var msg = action.result.msg ? action.result.msg : '操作成功！';
		My.alert(msg, cfg.successCallback);
	};
	form.submit(cfg);
};

My.dateRenderer = function(format) {
	format = format || 'Y-m-d';
	return function(v) {
		if (!v) {
			return '';
		}
		if (Ext.isDate(v)) {
			return (v.format(format));
		}
		if (Ext.isNumber(Number(v))) {
			var date = new Date();
			date.setTime(v);
			return date.format(format);
		}
		return v;
	};
};